<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
</style>

<body>
    <p class="test" id="test">
        这个是用来测试
    </p>
</body>
<script>
    window.onload = function () {
        // 递归调用 实现阶乘
        let factorial = (function f(num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * f(num - 1);
            }
        })

        let a = factorial;
        console.log(a(5));

        var name2 = "jhx";
        var obj = {
            name2: "whmk",
            sayName: function () {
                var that = this;
                return function () {
                    console.log(that.name2);
                }
            }
        }

        var c = obj;
        c.sayName()();

        (function assignHander() {
            var element = document.getElementById("test");
            var id = element.id;
            element.onclick = function () {
                console.log("当前点击元素的ID：" + id);
            }

            // 解除DOM对象的引用 顺利地减少其引用数。确保正常回收其占用的内存
            element = null;
        })();

        function outputNumbers(count) {
            for (var i = 0; i < count; i++) {
                console.log(i);
            }
            //如果有块级作用域 这里是访问不了i的值 但ES5之前都没有块级作用域 ES6 只有 使用let声明变量 而且也有了块级作用域
            console.log(i);
        }
        outputNumbers(3);

        function outputNumbers2(count) {
            (function () {
                for (var i = 0; i < count; i++) {
                    console.log(i);
                }
            })();
          //  console.log(i);//报错  在ES5中可以使用立即执行函数创建私有作用域 变量就会在函数执行后立即销毁
        }
        outputNumbers2(2)
    } 
</script>



</html>